/**
 * 
 */
package jmine.tec.report;

import java.util.Collection;
import java.util.List;

import jmine.tec.report.metadata.ColumnMetaData;

/**
 * Container to hold references to {@link ExecutableDataColumn} instances.
 * 
 * @author takeshi
 * @version 29/08/2007
 */
public interface ExecutableDataColumnContainer {
    /**
     * Finds an {@link ExecutableDataColumn} by its key.
     * 
     * @param columnKey the column key
     * @return {@link ExecutableDataColumn}
     */
    ExecutableDataColumn findExecutableDataColumn(String columnKey);

    /**
     * Gets the executable columns that reacts to specific class types. Never returns null.
     * 
     * @param type the type
     * @return a {@link List} of {@link ColumnMetaData}
     */
    List<ColumnMetaData> getColumnsByReactionType(Class<?>... type);

    /**
     * Returns a collection of all {@link ExecutableDataColumn}
     * 
     * @return {@link Collection} of executable data columns
     */
    Collection<? extends ExecutableDataColumn> getAllDataColumns();

}
